#define	_CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>
#include <stdlib.h>

//void rotate(int* nums, int numsSize, int k) {
//    int i = 0;
//    int j = 0;
//    k = k % numsSize;
//    for (i = 0; i < k; ++i)
//    {
//        int tmp = nums[numsSize - 1];
//        for (j = numsSize - 1; j > 0; --j)
//        {
//            nums[j] = nums[j - 1];
//        }
//        nums[0] = tmp;
//    }
//}

//void rotate(int* nums, int numsSize, int k) {
//    int* arr = (int*)malloc(sizeof(int) * numsSize);
//    int i = 0;
//    int j = 0;
//    for (i = 0; i < numsSize; ++i)
//    {
//        arr[(i + k) % numsSize] = nums[i];
//    }
//    for (i = 0; i < numsSize; ++i)
//    {
//        nums[i] = arr[i];
//    }
//}

//void Reverse(int* arr, int left, int right)
//{
//    int tmp = *(arr + left);
//    *(arr + left) = *(arr + right);
//    *(arr + right) = tmp;
//    ++left;
//    --right;
//}
//
//void rotate(int* nums, int numsSize, int k) {
//    Reverse(nums, 0, numsSize - k - 1);
//    Reverse(nums, numsSize - k, numsSize - 1);
//    Reverse(nums, 0, numsSize - 1);
//}

//void Reverse(int* arr, int left, int right)
//{
//    while (left < right)
//    {
//        int tmp = *(arr + left);
//        *(arr + left) = *(arr + right);
//        *(arr + right) = tmp;
//        ++left;
//        --right;
//    }
//}
//
//void rotate(int* nums, int numsSize, int k) {
//    k %= numsSize;
//    Reverse(nums, 0, numsSize - k - 1);
//    Reverse(nums, numsSize - k, numsSize - 1);
//    Reverse(nums, 0, numsSize - 1);
//}

int removeElement(int* nums, int numsSize, int val) {
    int i = 0;
    int left = 0;
    int right = 0;
    for (right = 0; right < numsSize; ++right)
    {
        if (nums[right] != val)
        {
            nums[left] = nums[right];
            left++;
        }
    }
    return left;
}